package com.xlh.service.courseTest.impl;

import com.google.common.collect.Lists;
import com.xlh.dto.course.ClassZtreeDTO;
import com.xlh.dto.user.ClassDTO;
import com.xlh.security.UserInfoHolder;
import com.xlh.service.courseTest.ClassListService;
import com.xlh.service.user.ClassService;
import com.xlh.util.BeanUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Map;

/**
 * @author zhr 2019/4/12
 */
@Service
public class PaperClassListServiceImpl implements ClassListService {

    @Autowired
    private ClassService classService;

    @Autowired
    private UserInfoHolder userInfoHolder;

    @Override
    public List<ClassZtreeDTO> getClassList(Long courseId) {
        // 获取该课程下所有的班级
        // todo 需要张锐进行检查。 原先没有userId，查询课程下的所有班级。现在增加助教功能，应该变成 当前教师，这门课程下的所有未结课的班级
        List<ClassDTO> classDTOS = classService.listClassCourse(
                courseId, userInfoHolder.getUserId(), null, false, null);
        // 转换数据
        return convertZtreeDTO(classDTOS);
    }

    private List<ClassZtreeDTO> convertZtreeDTO(List<ClassDTO> classDTOS) {
        List<ClassZtreeDTO> result = Lists.newArrayList();

        List<ClassZtreeDTO> classZtreeDTOS = BeanUtil.batchTransform(ClassZtreeDTO.class, classDTOS);

        final Long[] index = {0L};

        // 设置年级
        Map<String, List<ClassZtreeDTO>> gradeMap = BeanUtil.aggByKeyToList("grade", classZtreeDTOS);
        gradeMap.forEach((grade, gradeDTO) -> {
            ClassZtreeDTO ztreeDTO1 = new ClassZtreeDTO();
            ztreeDTO1.setId(index[0]++);
            ztreeDTO1.setName(grade);
            if (gradeDTO.stream().anyMatch(ClassDTO::getDefaultedClass)) {
                ztreeDTO1.setDefaultedClass(true);
            }

            // 设置班级名称
            ztreeDTO1.setChildren(gradeDTO);
            result.add(ztreeDTO1);
        });
        return result;
    }
}
